package fr.enssat.tpcloud.base;

import java.util.Date;
import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Projections;
import org.junit.Test;

import fr.enssat.tpcloud.model.Post;
import fr.enssat.tpcloud.model.User;

public class HibernateTest {

    @Test
    public void test() {
        
        try {
        	// Recupere la session hibernate
            Session session = HibernateUtil.getSession();
            
            // Ouverture d'une transaction SQL
            Transaction currentTansaction = session.beginTransaction();
            
            	// Creation d'un critere de rechere dans la base pour savoir cbn il y a de user (ac un select count *)
	            Criteria criteriaCount = session.createCriteria(User.class);
	            criteriaCount.setProjection(Projections.rowCount()); 
	            
	            // Recuperation le resultat du select count * 
	            int sizeCount =  ((Integer)criteriaCount.list().get(0)).intValue();
	
	            User newUser = new User();
	            newUser.setEmail("test@mail.com");
	            newUser.setName("toto");
	            
	            Post newPost = new Post();
	            newPost.setCreationDate(new Date());
	            newPost.setMessage("message !");
	            newPost.setUser(newUser);
	            session.save(newUser);
	            // Sauvegarde du l'utilisateur dans la base
	            session.save(newUser);
	            
	         // Sauvegarde du post dans la base
	            session.save(newPost);
	
	            // Recuperation du nombre d'element dans la table user (retourne une liste pour faire un size apres)
	            Criteria newCriteria = session.createCriteria(Post.class);
	            List<Post> allPost = newCriteria.list();
	            //int newSize = allPost.size();
      
            // Commit de la trasaction
            currentTansaction.commit();
            
            //System.out.println("Before : "+sizeCount+" - After :"+newSize);
            
            // Coupe le lien avec la base de donnee
            session.close();
            
            Post post = allPost.get(0);
            System.out.println("message : " + post.getMessage());
            System.out.println("name : " + post.getUser().getName());
            
            
            
        } catch (HibernateException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}
